package cn.iocoder.yudao.module.wms.service.rdrecord08;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.wms.controller.admin.rdrecord08.vo.Rdrecord08PageReqVO;
import cn.iocoder.yudao.module.wms.controller.admin.rdrecord08.vo.Rdrecord08SaveReqVO;
import cn.iocoder.yudao.module.wms.dal.dataobject.rdrecord08.Rdrecord08DO;
import cn.iocoder.yudao.module.wms.dal.dataobject.rdrecord08.Rdrecords08DO;

import javax.validation.Valid;
import java.util.List;

/**
 * 其他入库主 Service 接口
 *
 * @author 曾劲松
 */
public interface Rdrecord08Service {

    /**
     * 创建其他入库主
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRdrecord08(@Valid Rdrecord08SaveReqVO createReqVO);

    /**
     * 提交其他入库流程
     *
     * @param id 其他入库id
     */
    void process(Long id);

    /**
     * 更新其他入库主
     *
     * @param updateReqVO 更新信息
     */
    void updateRdrecord08(@Valid Rdrecord08SaveReqVO updateReqVO);

    /**
     * 更新其他入库主状态
     *
     * @param id 编号
     * @param status 结果
     */
    void updateRdrecord08Status(Long id, Integer status);

    /**
     * 删除其他入库主
     *
     * @param id 编号
     */
    void deleteRdrecord08(Long id);

    /**
     * 获得其他入库主
     *
     * @param id 编号
     * @return 其他入库主
     */
    Rdrecord08DO getRdrecord08(Long id);

    /**
     * 获得其他入库主
     *
     * @param processInstanceId 流程实例id
     * @return 其他入库主
     */
    Rdrecord08DO getRdrecord08ByProcessInstanceId(String processInstanceId);

    /**
     * 获得其他入库主分页
     *
     * @param pageReqVO 分页查询
     * @return 其他入库主分页
     */
    PageResult<Rdrecord08DO> getRdrecord08Page(Rdrecord08PageReqVO pageReqVO);

    /**
     * 其他入库业务处理
     *
     * @param id 其他入库单id
     * @param type 退(-1),进(1)
     */
    void businessProcessing(Long id, int type);

    // ==================== 子表（其他入库子） ====================

    /**
     * 获得其他入库子列表
     *
     * @param orderId 订单id
     * @return 其他入库子列表
     */
    List<Rdrecords08DO> getRdrecords08ListByOrderId(Long orderId);

}